{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "efa0fbbc-dd8e-449f-9ffe-5f7eb33f86b8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.7.0+cpu False 3.12.4\n"
     ]
    }
   ],
   "source": [
    "import torch, platform, psutil\n",
    "print(torch.__version__, torch.cuda.is_available(), platform.python_version())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "ae946f6b-7aa5-42cb-8af2-db42b24afb87",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAGHCAYAAAAQgDBiAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABUC0lEQVR4nO3deXhTZdo/8G/apuleWgpNC6WtCEItO7IqgtBSREadGUZl9AXFDcQZwJXXESgKuKAwP2fEFerIIOig7GJb2RSKrFWR5VUoi9CytNBCS9M0eX5/dE5smu0kTU6Wfj/X1WsmJycnT55Uzt1nuW+VEEKAiIiISCFB3m4AERERtSwMPoiIiEhRDD6IiIhIUQw+iIiISFEMPoiIiEhRDD6IiIhIUQw+iIiISFEMPoiIiEhRDD6IiIhIUQw+yG/l5eVBpVKZfkJCQpCUlIR7770XP//8s9faNXv2bKhUKq+9f1Nbt26FSqXC1q1bTcd8rY3uMnToUAwdOtSl186bNw+rV692a3tcdeLECahUKuTl5ZmO7dy5E7Nnz8bly5ctzk9LS8Mdd9yhXAMdkP7bPHHihLebQj6KwQf5vaVLl6KoqAiFhYWYMmUK1q5di5tvvhmXLl3ydtN81sMPP4yioiJvN8On+FLwkZSUhKKiIowePdp0bOfOncjNzbUafPia0aNHo6ioCElJSd5uCvmoEG83gKi5MjMz0bdvXwANf/kaDAbMmjULq1evxoMPPujl1vmm9u3bo3379t5uhl3Xrl1DeHi4t5vhFRqNBgMGDPB2M1zWpk0btGnTxtvNIB/GkQ8KOFIgcu7cOdOx2tpaPPXUU+jZsydiY2MRHx+PgQMHYs2aNRavV6lUmDJlCj7++GN07doVERER6NGjB9avX29x7oYNG9CzZ09oNBqkp6djwYIFVttUW1uLGTNmID09HaGhoWjXrh2eeOIJi79ipeHz9evXo1evXggPD0fXrl1N752Xl4euXbsiMjIS/fr1w969e13qI2vTLtJ7b9q0Cb1790Z4eDi6dOmCJUuWWLy+rKwMjz32GNq3b4/Q0FCkp6cjNzcX9fX1Zufl5uaif//+iI+PR0xMDHr37o0PP/wQTetZSu/9+eefo1evXggLC0Nubq7N9gsh8NprryE1NRVhYWHo3bs3vvzyS4vz5H7vKpUK1dXV+Oijj0zTeNL0zYULFzB58mRkZGQgKioKbdu2xW233YZvvvnGbh8DwDPPPIPY2FgYDAbTsSeffBIqlQqvv/666Vh5eTmCgoLw1ltvAbCcdpk9ezaeeeYZAEB6erqpjY2n0gDI+u6akt5rwYIFePPNN5Geno6oqCgMHDgQu3btsjh/7dq1GDhwICIiIhAdHY2srCyLUTRr0y4HDhzAHXfcgbZt20Kj0SA5ORmjR4/Gr7/+ajpHCIG3334bPXv2RHh4OOLi4vDHP/4Rx48fd/g5yM8IIj+1dOlSAUDs2bPH7Pg//vEPAUCsWrXKdOzy5ctiwoQJ4uOPPxabN28WmzZtEk8//bQICgoSH330kdnrAYi0tDTRr18/8emnn4qNGzeKoUOHipCQEHHs2DHTeYWFhSI4OFjcfPPN4vPPPxefffaZuOmmm0SHDh1E4/+0jEajGDlypAgJCREvvviiyM/PFwsWLBCRkZGiV69eora21nRuamqqaN++vcjMzBSffPKJ2Lhxo+jfv79Qq9Vi5syZYvDgweLzzz8XX3zxhejcubNITEwUNTU1dvtpy5YtAoDYsmWL6disWbNE0//8pffOyMgQ//rXv8RXX30lxo4dKwCIbdu2mc4rLS0VKSkpIjU1Vbz77ruisLBQvPTSS0Kj0YgJEyaYXXPChAniww8/FAUFBaKgoEC89NJLIjw8XOTm5lq8d1JSkrjuuuvEkiVLxJYtW8Tu3bttfiap/RMnThRffvmleO+990S7du2EVqsVt956q+k8ud97UVGRCA8PF7fffrsoKioSRUVF4qeffhJCCHHkyBExadIksWLFCrF161axfv16MXHiRBEUFGTWp9Zs2rRJABA7d+40HevSpYsIDw8XWVlZpmMrV64UAMShQ4eEEEKUlJQIAGLp0qVCCCFOnz4tnnzySQFAfP7556Y2VlZWOvXdWSO9V1pamsjJyRGrV68Wq1evFt26dRNxcXHi8uXLpnP//e9/CwAiOztbrF69WqxcuVL06dNHhIaGim+++cZ0nvTfZklJiRBCiKtXr4rWrVuLvn37ik8//VRs27ZNrFy5Ujz++OOmzyyEEI888ohQq9XiqaeeEps2bRLLly8XXbp0EYmJiaKsrMzu5yD/wuCD/Jb0D9yuXbuEXq8XV65cEZs2bRJarVYMGTJE6PV6m6+tr68Xer1eTJw4UfTq1cvsOQAiMTFRVFVVmY6VlZWJoKAgMX/+fNOx/v37i+TkZHHt2jXTsaqqKhEfH292Y5duQK+99prZ+0g3nPfee890LDU1VYSHh4tff/3VdKy4uFgAEElJSaK6utp0fPXq1QKAWLt2rd1+cib4CAsLEydPnjQdu3btmoiPjxePPfaY6dhjjz0moqKizM4TQogFCxYIAKabdlMGg0Ho9XoxZ84c0bp1a2E0Gs3eOzg4WBw9etTuZxFCiEuXLomwsDBx9913mx3fsWOHAGAWfDRl73uPjIwU48ePd/j+0jWGDx9u0YamqqurRWhoqJgzZ44QQohff/1VABDPPfecCA8PNwWejzzyiEhOTja9rmnwIYQQr7/+utkNvTG535010nt169ZN1NfXm47v3r1bABCffPKJEKLh+0tOThbdunUTBoPBdN6VK1dE27ZtxaBBg0zHmgYfe/fuFQDE6tWrbbajqKhIABBvvPGG2fHTp0+L8PBw8eyzz9r9HORfOO1Cfm/AgAFQq9WIjo5GTk4O4uLisGbNGoSEmC9p+uyzzzB48GBERUUhJCQEarUaH374IQ4fPmxxzWHDhiE6Otr0ODExEW3btsXJkycBANXV1dizZw9+//vfIywszHRedHQ0xowZY3atzZs3AwAmTJhgdnzs2LGIjIzE119/bXa8Z8+eaNeunelx165dATSsZ4mIiLA4LrXJHXr27IkOHTqYHoeFhaFz585m77F+/XoMGzYMycnJqK+vN/2MGjUKALBt2zbTuZs3b8aIESMQGxuL4OBgqNVqzJw5E+Xl5Th//rzZe3fv3h2dO3d22MaioiLU1tbiz3/+s9nxQYMGITU11eJ8Z753W9555x307t0bYWFhpmt8/fXXDq8RERGBgQMHorCwEABQUFCAVq1a4ZlnnkFdXR2+/fZbAEBhYSFGjBghuz3WyPnu7Bk9ejSCg4NNj7t37w7gt9+vo0eP4uzZs3jggQcQFPTbrSMqKgp/+MMfsGvXLtTU1Fi99vXXX4+4uDg899xzeOedd3Do0CGLc9avXw+VSoX777/f7PdKq9WiR48eFlNM5N8YfJDf+9e//oU9e/Zg8+bNeOyxx3D48GHcd999Zud8/vnn+NOf/oR27dph2bJlKCoqwp49e/DQQw+htrbW4pqtW7e2OKbRaHDt2jUAwKVLl2A0GqHVai3Oa3qsvLwcISEhFgvwVCoVtFotysvLzY7Hx8ebPQ4NDbV73Fr7XeXocwMNa2nWrVsHtVpt9nPjjTcCAC5evAgA2L17N7KzswEA77//Pnbs2IE9e/bghRdeAACzawKQvTNC6i85fe/s927Nm2++iUmTJqF///5YtWoVdu3ahT179iAnJ8fiM1gzYsQI7Nq1C9XV1SgsLMRtt92G1q1bo0+fPigsLERJSQlKSkqaHXzI+e6ceb1GowHw2/ck9bu17yk5ORlGo9HmDrPY2Fhs27YNPXv2xP/+7//ixhtvRHJyMmbNmgW9Xg+g4fdKCIHExESL361du3aZfq8oMHC3C/m9rl27mhaZDhs2DAaDAR988AH+85//4I9//CMAYNmyZUhPT8fKlSvNFlrqdDqX3jMuLg4qlQplZWUWzzU91rp1a9TX1+PChQtmAYgQAmVlZbjppptcaoO3JCQkoHv37pg7d67V55OTkwEAK1asgFqtxvr1681Gh2xtZ5Wbd0S6Sdrq+7S0NNNjd3zvy5Ytw9ChQ7F48WKz41euXJH1+uHDh+PFF1/E9u3b8fXXX2PWrFmm4/n5+UhPTzc99mVSv5eWllo8d/bsWQQFBSEuLs7m67t164YVK1ZACIEffvgBeXl5mDNnDsLDw/H8888jISEBKpUK33zzjSnwaczaMfJfHPmggPPaa68hLi4OM2fOhNFoBNBwYwsNDTW7AZWVlVnd7SKHtNvk888/N/sL+sqVK1i3bp3ZudJNZdmyZWbHV61aherqap+/6TR1xx134ODBg+jYsSP69u1r8SMFH1Lit8ZD+deuXcPHH3/crPcfMGAAwsLC8O9//9vs+M6dOy2mGJz53m2NEqhUKosb3w8//CA7T0q/fv0QExODRYsWoaysDFlZWQAaRkQOHDiATz/9FBkZGaZ+s6XpSITSbrjhBrRr1w7Lly83261UXV2NVatWmXbAOKJSqdCjRw8sXLgQrVq1wv79+wE0/F4JIXDmzBmrv1fdunXz2Gcj5TH4oIATFxeHGTNm4PDhw1i+fDmAhn/Yjh49ismTJ2Pz5s346KOPcPPNNzcrCdJLL71kupmsXr0aq1atwvDhwxEZGWl2XlZWFkaOHInnnnsOubm5KCwsxJtvvokHH3wQvXr1wgMPPNCsz6u0OXPmQK1WY9CgQVi8eDE2b96MjRs34u2338Ydd9xh2jo5evRoXL16FePGjUNBQQFWrFiBW265pdl/wcbFxeHpp5/GF198gYcffhhfffUVPvjgA/zpT3+ymHZx5nvv1q0btm7dinXr1mHv3r04evSo6Rr5+fmYNWsWNm/ejMWLF2PkyJGmEQtHgoODceutt5pGOTp27AgAGDx4MDQaDb7++mtZUy7Szffvf/87ioqKsHfvXtmjL+4QFBSE1157DcXFxbjjjjuwdu1afPbZZxg2bBguX76MV155xeZr169fj9tvvx3vvfceCgsLUVBQgEmTJuHy5cumYGzw4MF49NFH8eCDD+LZZ5/F+vXrsWXLFixfvhyTJ0+2GHkiP+fV5a5EzWBrq60QDSv9O3ToIDp16mRawf/KK6+ItLQ0odFoRNeuXcX7779vddcHAPHEE09YXDM1NdViN8TatWtF9+7dRWhoqOjQoYN45ZVXrF7z2rVr4rnnnhOpqalCrVaLpKQkMWnSJHHp0iWL9xg9erTFe1trk7RL4fXXX7fZR0I4t9vF2nvfeuutFjtILly4IP7yl7+I9PR0oVarRXx8vOjTp4944YUXxNWrV03nLVmyRNxwww1Co9GI6667TsyfP198+OGHFrs2bL23LUajUcyfP1+kpKSI0NBQ0b17d7Fu3TqrbZX7vRcXF4vBgweLiIgIs10zOp1OPP3006Jdu3YiLCxM9O7dW6xevVqMHz9epKamymrv3//+dwFAPPLII2bHs7KyrO5YsrbbRQghZsyYIZKTk0VQUJDZd+rMd9eUvd8jAGLWrFlmx1avXi369+8vwsLCRGRkpBg+fLjYsWOH2TlNd7scOXJE3HfffaJjx44iPDxcxMbGin79+om8vDyL91yyZIno37+/iIyMFOHh4aJjx47if/7nf8TevXvtfg7yLyohmmT7ISIiIvIgTrsQERGRohh8EBERkaIYfBAREZGiGHwQERGRohh8EBERkaIYfBAREZGimF69CaPRiLNnzyI6Olp2umciIiJqKBtx5coVJCcnmxUgbIrBRxNnz55FSkqKt5tBRETkt06fPo327dvbfJ7BRxNSGfXTp08jJibGy63xHr1ej/z8fGRnZ0OtVnu7OQGL/ex57GNlsJ89zx/6uKqqCikpKaZ7qS0MPpqQplpiYmJafPARERGBmJgYn/0lDwTsZ89jHyuD/ex5/tTHjpYtcMEpERERKYrBBxERESmKwQcREREpims+XGAwGKDX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EVFgY/DhAbtLKixGPBoTAEora7G7pEK5RhEREfkIBh8ecP6K7cDDlfOIiIgCCYMPD2gbHebW84iIiAIJgw8P6Jcej6TYMNjaUKtCw66XfunxSjaLiIjIJzD48IDgIBVmjckAAIsARHo8a0wG830QEVGLxODDQ3Iyk7D4/t7QxppPrWhjw7D4/t7M80FERC0Wk4x5UE5mErIytMxwSkRE1AiDDw8LDlJhYMfW3m4GERGRz+C0CxERESmKwQcREREpisEHERERKYrBBxERESmKwQcREREpisEHERERKYpbbZsQoqHMfVVVlZdb4l16vR41NTWoqqqCWq32dnMCFvvZ89jHymA/e54/9LF075TupbYw+GjiypUrAICUlBQvt4SIiMg/XblyBbGxsTafVwlH4UkLYzQacfbsWURHR0OlarmZSKuqqpCSkoLTp08jJibG280JWOxnz2MfK4P97Hn+0MdCCFy5cgXJyckICrK9soMjH00EBQWhffv23m6Gz4iJifHZX/JAwn72PPaxMtjPnufrfWxvxEPCBadERESkKAYfREREpCgGH2SVRqPBrFmzoNFovN2UgMZ+9jz2sTLYz54XSH3MBadERESkKI58EBERkaIYfBAREZGiGHwQERGRohh8EBERkaIYfJBDJ06cwMSJE5Geno7w8HB07NgRs2bNQl1dnbebFlDmzp2LQYMGISIiAq1atfJ2cwLG22+/jfT0dISFhaFPnz745ptvvN2kgLJ9+3aMGTMGycnJUKlUWL16tbebFHDmz5+Pm266CdHR0Wjbti3uuusuHD161NvNahYGH+TQkSNHYDQa8e677+Knn37CwoUL8c477+B///d/vd20gFJXV4exY8di0qRJ3m5KwFi5ciWmTp2KF154AQcOHMAtt9yCUaNG4dSpU95uWsCorq5Gjx498I9//MPbTQlY27ZtwxNPPIFdu3ahoKAA9fX1yM7ORnV1tbeb5jJutSWXvP7661i8eDGOHz/u7aYEnLy8PEydOhWXL1/2dlP8Xv/+/dG7d28sXrzYdKxr16646667MH/+fC+2LDCpVCp88cUXuOuuu7zdlIB24cIFtG3bFtu2bcOQIUO83RyXcOSDXFJZWYn4+HhvN4PIprq6Ouzbtw/Z2dlmx7Ozs7Fz504vtYqo+SorKwHAr/8NZvBBTjt27BjeeustPP74495uCpFNFy9ehMFgQGJiotnxxMRElJWVealVRM0jhMD06dNx8803IzMz09vNcRmDjxZs9uzZUKlUdn/27t1r9pqzZ88iJycHY8eOxcMPP+yllvsPV/qY3EulUpk9FkJYHCPyF1OmTMEPP/yATz75xNtNaZYQbzeAvGfKlCm499577Z6TlpZm+v9nz57FsGHDMHDgQLz33nsebl1gcLaPyX0SEhIQHBxsMcpx/vx5i9EQIn/w5JNPYu3atdi+fTvat2/v7eY0C4OPFiwhIQEJCQmyzj1z5gyGDRuGPn36YOnSpQgK4qCZHM70MblXaGgo+vTpg4KCAtx9992m4wUFBbjzzju92DIi5wgh8OSTT+KLL77A1q1bkZ6e7u0mNRuDD3Lo7NmzGDp0KDp06IAFCxbgwoULpue0Wq0XWxZYTp06hYqKCpw6dQoGgwHFxcUAgOuvvx5RUVHebZyfmj59Oh544AH07dvXNGJ36tQprldyo6tXr+KXX34xPS4pKUFxcTHi4+PRoUMHL7YscDzxxBNYvnw51qxZg+joaNNoXmxsLMLDw73cOhcJIgeWLl0qAFj9IfcZP3681T7esmWLt5vm1/75z3+K1NRUERoaKnr37i22bdvm7SYFlC1btlj9vR0/fry3mxYwbP37u3TpUm83zWXM80FERESK4sQ9ERERKYrBBxERESmKwQcREREpisEHERERKYrBBxERESmKwQcREREpisEHERERKYrBBxERESmKwQcREREpisEHERERKYrBBxERESmKwQcR+bQLFy5Aq9Vi3rx5pmPfffcdQkNDkZ+f78WWEZGrWFiOiHzexo0bcdddd2Hnzp3o0qULevXqhdGjR2PRokXebhoRuYDBBxH5hSeeeAKFhYW46aab8P3332PPnj0ICwvzdrOIyAUMPojIL1y7dg2ZmZk4ffo09u7di+7du3u7SUTkIq75ICK/cPz4cZw9exZGoxEnT570dnOIqBk48kFEPq+urg79+vVDz5490aVLF7z55pv48ccfkZiY6O2mEZELGHwQkc975pln8J///Afff/89oqKiMGzYMERHR2P9+vXebhoRuYDTLkTk07Zu3YpFixbh448/RkxMDIKCgvDxxx/j22+/xeLFi73dPCJyAUc+iIiISFEc+SAiIiJFMfggIiIiRTH4ICIiIkUx+CAiIiJFMfggIiIiRTH4ICIiIkUx+CAiIiJFMfggIiIiRTH4ICIiIkUx+CAiIiJFMfggIiIiRf1/c3sxfgnE+I8AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 600x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch   1 | loss=78.8792 | w=-1.489 b=-0.365\n",
      "Epoch  20 | loss=62.7200 | w=0.207 b=-2.401\n",
      "Epoch  40 | loss=29.4009 | w=0.493 b=-2.374\n",
      "Epoch  60 | loss=59.2713 | w=0.530 b=-2.445\n",
      "Epoch  80 | loss=36.4183 | w=0.408 b=-2.468\n",
      "Epoch 100 | loss=56.9146 | w=0.496 b=-2.512\n",
      "Epoch 120 | loss=97.7915 | w=0.554 b=-2.456\n",
      "Epoch 140 | loss=133.6022 | w=0.455 b=-2.449\n",
      "Epoch 160 | loss=76.9086 | w=0.551 b=-2.598\n",
      "Epoch 180 | loss=51.3207 | w=0.516 b=-2.465\n",
      "Epoch 200 | loss=116.2091 | w=0.445 b=-2.332\n"
     ]
    },
    {
     "data": {
      "image/png": "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AKB3L5JVeV6jroDGxmwPUusmEx66T7hMJsPXX3+N4cOH646tW7cOISEhaNy4MXJycvDyyy+joqIChw4dgkKhMHqetLQ0pKenGxxfs2YNgoKC9I75+fkhJiYG8fHxVm8XrdYIDF5xEJdulBt/PwDqh/pj88Sudt/oZdKkSSgqKsJ///tfg+fGjRuH48ePY9++fQbPffPNN5gxYwbOnDkDoLJNZs2ahXPnzpm93uHDh9GvXz+cP38eISEh9nkT5JHKy8tx/vx55Ofnc3iPqBYoLS3F6NGjUVRUhLCwMJPlvKrn48EHH9T9v23btujatSsaN26MTZs24b777jP6mlmzZmH69Om6x8XFxYiPj0dKSopBw5WVleluqNbu1rjvzwKTgQdQGYFeulGOU4UV6N6krlXntkQul8PPz8/oB8HPzw++vr4ICwvDjh07MH/+fJw4cQLFxcWoqKhAWVkZfH19ERwcjICAAMhkMoPzHDlyBOnp6Th69CgKCwt1f8Ffv34dDRo0sOt78TZCCNy4cQOhoaFeuXldWVkZAgMD0adPH5ftcKpSqbBlyxYMGDAAcrncJXWoDdjOjmfPNlZrBA6du4arN5WIClGgS+MIu/zhqx09sMSrgo/qYmNj0bhxY/zxxx8myygUCqO9InK53OCbq1arIZPJ4OPjY/XOjVdumg48qpez966Q2pUuxs578uRJJCYm4vz58xg6dCgmTJiAuXPnok6dOti6dSuefvppqNVqvfdc9TwlJSVITU1FSkoKVq9ejXr16iE3NxcDBw5ERUUFd7i0QBuomfr+eDofHx/dKitX35DcoQ61AdvZ8ezRxnIAvVpE26dCVc8rsV5eHXwUFBTg/PnziI11znax5rjTLGOt7du347fffsO0adNw8OBBVFRU4M0334SPjw80Gg1Wr16tV97f398g7fvJkydx9epVvP7664iPjwcAHDx40GnvgYiIPI9H/al18+ZNZGdnIzs7GwCQk5OD7Oxs5Obm4ubNm3j22Wexd+9enD17Fjt37sSwYcMQFRWFe++917UVxz+zjE11aslQuerFUbOMlUol8vPzceHCBRw+fBjz5s3DPffcg6FDh+LRRx9F06ZNUVFRgaVLl+LPP//Ep59+ilWrVumdIyEhATdv3sS2bdtw9epVlJaWolGjRvD399e97rvvvsOrr77qkPdARETewaOC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",
      "text/plain": [
       "<Figure size 600x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import torch\n",
    "import matplotlib.pyplot as plt\n",
    "from torch.utils.data import TensorDataset, DataLoader\n",
    "\n",
    "torch.manual_seed(42)          # 保证复现性\n",
    "\n",
    "#随机生成数据\n",
    "true_w, true_b = 7.3, -2.5     # 真实参数\n",
    "n_samples = 120\n",
    "X = torch.randn(n_samples, 1)          # 特征\n",
    "noise = torch.randn(n_samples, 1) * 2  # 高斯噪声\n",
    "y = true_w * X + true_b + noise        # 目标\n",
    "\n",
    "# 可视化原始数据\n",
    "plt.figure(figsize=(6, 4))\n",
    "plt.scatter(X.numpy(), y.numpy(), c='tab:blue', label='Data')\n",
    "plt.title(\"Random linear data with noise\")\n",
    "plt.xlabel(\"x\")\n",
    "plt.ylabel(\"y\")\n",
    "plt.legend()\n",
    "plt.grid(True)\n",
    "plt.show()\n",
    "\n",
    "#构造 DataLoader\n",
    "dataset = TensorDataset(X, y)\n",
    "loader  = DataLoader(dataset, batch_size=16, shuffle=True)\n",
    "\n",
    "#定义可训练参数\n",
    "w = torch.randn(1, requires_grad=True)  # 斜率\n",
    "b = torch.zeros(1, requires_grad=True)  # 截距\n",
    "\n",
    "#超参数\n",
    "lr = 0.01\n",
    "epochs = 200\n",
    "\n",
    "# 训练循环（手动梯度下降）\n",
    "for epoch in range(1, epochs+1):\n",
    "    for xb, yb in loader:\n",
    "        # 前向\n",
    "        y_pred = xb @ w.t() + b\n",
    "        loss = ((y_pred - yb) ** 2).mean()\n",
    "\n",
    "        # 反向\n",
    "        loss.backward()\n",
    "\n",
    "        # 手动更新参数（梯度下降）\n",
    "        with torch.no_grad():\n",
    "            w -= lr * w.grad\n",
    "            b -= lr * b.grad\n",
    "            w.grad.zero_()\n",
    "            b.grad.zero_()\n",
    "\n",
    "    if epoch % 20 == 0 or epoch == 1:\n",
    "        print(f\"Epoch {epoch:3d} | loss={loss.item():.4f} | w={w.item():.3f} b={b.item():.3f}\")\n",
    "\n",
    "#可视化拟合结果\n",
    "plt.figure(figsize=(6, 4))\n",
    "plt.scatter(X.numpy(), y.numpy(), c='tab:blue', label='Data')\n",
    "with torch.no_grad():\n",
    "    x_line = torch.linspace(X.min(), X.max(), 100).unsqueeze(1)\n",
    "    y_line = x_line @ w.t() + b\n",
    "    plt.plot(x_line.numpy(), y_line.numpy(), 'r-', label=f'Fitted: y={w.item():.2f}x+{b.item():.2f}')\n",
    "plt.title(\"Gradient Descent Linear Regression\")\n",
    "plt.xlabel(\"x\")\n",
    "plt.ylabel(\"y\")\n",
    "plt.legend()\n",
    "plt.grid(True)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d934e633-17b3-4375-850a-e3cc91fd9ad7",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
